package com.agritech.smartfarming.chainofresponsibility;

import com.agritech.smartfarming.model.AgriculturalMachine;
import com.agritech.smartfarming.model.MachineStatus;
import com.agritech.smartfarming.model.Position;

/**
 * 障碍物处理器，处理障碍物检测事件
 */
public class ObstacleHandler extends SafetyHandler {
    @Override
    public boolean handle(AgriculturalMachine machine, SafetyEvent event) {
        // 只处理障碍物检测类型的事件
        if (event.getType() == SafetyEvent.EventType.OBSTACLE_DETECTED) {
            System.out.println("【障碍物处理器】处理事件: " + event);
            
            // 根据严重程度采取不同的措施
            if (event.getSeverity() >= 4) {
                // 严重障碍物，立即停止
                System.out.println("⚠️ 严重障碍物！" + machine.getName() + " 紧急停止！");
                machine.setStatus(MachineStatus.IDLE);
                return true;
            } else if (event.getSeverity() >= 2) {
                // 一般障碍物，尝试绕行
                System.out.println("⚠️ 检测到障碍物，" + machine.getName() + " 正在计算绕行路径");
                
                // 模拟计算绕行路径
                Position currentPosition = machine.getPosition();
                Position detourPosition = new Position(
                    currentPosition.getLatitude() + 0.0001,
                    currentPosition.getLongitude() + 0.0001,
                    currentPosition.getAltitude()
                );
                
                System.out.println(machine.getName() + " 正在绕行避开障碍物");
                machine.moveTo(detourPosition);
                return true;
            }
        }
        
        // 不是障碍物事件或不需要处理，传递给下一个处理器
        return passToNext(machine, event);
    }
} 